package com.chenbei.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chenbei.common.exception.LogicHandleException;
import com.chenbei.system.domain.SysDictItem;
import com.chenbei.system.mapper.SysDictItemMapper;
import com.chenbei.system.service.ISysDictItemService;
import com.chenbei.system.vo.req.SysDictItemReq;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class SysDictItemService extends ServiceImpl<SysDictItemMapper, SysDictItem> implements ISysDictItemService {

    @Override
    public void add(SysDictItem sysDictItem) {
        LambdaQueryWrapper<SysDictItem> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(SysDictItem::getLabel, sysDictItem.getLabel())
                .or()
                .eq(SysDictItem::getLabelValue, sysDictItem.getLabelValue());
        if (count(lambdaQueryWrapper) > 0) {
            throw new LogicHandleException("字典项名称或键值已存在");
        }
        if (sysDictItem.getStatus() == null) {
            sysDictItem.setStatus(1);
        }
        if (sysDictItem.getSort() == null) {
            sysDictItem.setSort(1);
        }
        save(sysDictItem);
    }

    @Override
    public void deleteById(long id) {
        removeById(id);
    }

    @Override
    public void update(SysDictItem sysDictItem) {
        LambdaQueryWrapper<SysDictItem> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.ne(SysDictItem::getId, sysDictItem.getId())
                .eq(SysDictItem::getDictId, sysDictItem.getDictId())
                .and(consumer -> {
                    consumer.eq(SysDictItem::getLabel, sysDictItem.getLabel())
                            .or()
                            .eq(SysDictItem::getLabelValue, sysDictItem.getLabelValue());
                });
        if (count(lambdaQueryWrapper) > 0) {
            throw new LogicHandleException("字典项名称或键值已存在");
        }
        updateById(sysDictItem);
    }

    @Override
    public Page<SysDictItem> listPage(SysDictItemReq sysDictItemReq) {
        LambdaQueryWrapper<SysDictItem> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.orderByAsc(SysDictItem::getSort).orderByAsc(SysDictItem::getId);
        if (sysDictItemReq.getDictId() != null && sysDictItemReq.getDictId() > 0) {
            lambdaQueryWrapper.eq(SysDictItem::getDictId, sysDictItemReq.getDictId());
        }
        if (StringUtils.isNoneBlank(sysDictItemReq.getLabel())) {
            lambdaQueryWrapper.like(SysDictItem::getLabel, sysDictItemReq.getLabel());
        }
        if (sysDictItemReq.getStatus() != null && sysDictItemReq.getStatus() > 0) {
            lambdaQueryWrapper.eq(SysDictItem::getStatus, sysDictItemReq.getStatus());
        }
        Page<SysDictItem> pageConfig = new Page<>(sysDictItemReq.getPageNum(), sysDictItemReq.getPageSize());
        return page(pageConfig, lambdaQueryWrapper);
    }
}
